如何用 Substrate 创建一条私有链(上)
本文是 Substrate 开发者中心的教程《创建一条私有链》的第一部分。PolkaWorld 社区正在翻译本文,后续将在 PolkaWorld 网站和公众号上连载,敬请期待。
创建私有网络
在本教程中,我们将练习如何通过 Substrate ,使用你选择的验证人集/授权集来启动区块链网络。
安装 Node Template
当你学习完教程 创建你的第一条 Substrate 链[1] 之后,你应该已经在计算机上编译了 Substrate Node Template[2] 的 v2.0.0-rc3
版本,如果没有的话,请先学习完教程
“如果你是有经验的开发人员,倾向于选择跳过该教程,建议你可以根据自述文件中的说明安装节点模板
你需要做哪些事
在正式开始之前,我们先列出了本教程中将要做的事情,如下:
启动一条基于模板项目的 Substrate 区块链网络 。 生成 ed25519 和 sr25519 密钥对,以用作网络授权。 创建和编辑 chainspec json 文件。
听起来不错?好,那我们开始吧!
从 Alice 和 Bob 开启区块链之旅
在我们生成自己的密钥,并启动一个真正独特的 Substrate 网络之前,让我们从一个名为local
的预定义网络规范开始,学习带有两个称为 Alice 和 Bob 的预定义(绝非私有)密钥的基础知识。
“本教程的这一部分应在具有单个 Substrate 二进制文件的单个工作站上运行。如果到目前为止,你已经按照本教程进行操作,则说明设置正确。
先从 Alice 开始
Alice (或者正在操作的人) 应该从节点模板存储库根目录运行这些命令。
“这里的操作明确显示了
purge-chain
命令。之后我们会忽略此操作。需注意的是,无论何时尝试启动新网络,都应清除旧的链数据。
# Purge any chain data from previous runs
# You will be prompted to type `y`
./target/release/node-template purge-chain --base-path /tmp/alice --chain local
# Start Alice's node
./target/release/node-template \
--base-path /tmp/alice \
--chain local \
--alice \
--port 30333 \
--ws-port 9944 \
--rpc-port 9933 \
--telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
--validator
让我们详细了解下这些标记:
节点启动时,您应该会看到类似的输出结果:
2020-06-10 13:19:04 Substrate Node
2020-06-10 13:19:04 ✌️ version 2.0.0-rc3-f5acce1-x86_64-linux-gnu
2020-06-10 13:19:04 ❤️ by Substrate DevHub <https://github.com/substrate-developer-hub>, 2017-2020
2020-06-10 13:19:04 📋 Chain specification: Local Testnet
2020-06-10 13:19:04 🏷 Node name: Alice
2020-06-10 13:19:04 👤 Role: AUTHORITY
2020-06-10 13:19:04 💾 Database: RocksDb at /tmp/alice/chains/local_testnet/db
2020-06-10 13:19:04 ⛓ Native runtime: node-template-1 (node-template-1.tx1.au1)
2020-06-10 13:19:05 🔨 Initializing Genesis block/state (state: 0xf583…2e1c, header-hash: 0x826a…389d)
2020-06-10 13:19:05 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
2020-06-10 13:19:05 ⏱ Loaded block-time = 6000 milliseconds from genesis on first-launch
2020-06-10 13:19:05 📦 Highest known block at #0
2020-06-10 13:19:05 Using default protocol ID "sup" because none is configured in the chain specs
2020-06-10 13:19:05 🏷 Local node identity is: 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs (legacy representation: QmZoJwxoMLw6mLpYRy6ErXmZdPf62HuLFBFw6yKXwVqaPq)
2020-06-10 13:19:05 〽️ Prometheus server started at 127.0.0.1:9615
2020-06-10 13:19:10 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:19:15 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
...
“注意
🔨 Initializing Genesis block/state (state: 0xf583…2e1c, header-hash: 0x826a…389d)
显示了节点正在使用哪个创世纪区块。启动下一个节点时,请验证这些值是否相等。🏷 Local node identity is: 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs...
显示了 Bob 从 Alice 节点启动时将需要的对等ID。
你会注意到,实际上尚未生成任何区块。只有当另一个节点加入网络之后,才会开始产生区块。
通过运行./target/release/node-template --help
可以获得有关所有这些标记,以及我未提及的其他标记的更多详细信息。
附加用户界面
通过查看终端中产生的输出,您可以了解很多有关节点的信息。这里有一个非常好的界面展示的示例,叫做 Polkadot-JS Apps,或者简称为 "Apps" 。
可以在您的 Web 浏览器中,导航到 https://polkadot.js.org/apps/#/settings?rpc=ws://127.0.0.1:9944。
“某些浏览器(尤其是 Firefox)将无法从 https 网站连接到本地节点。一个简单的解决方法是尝试使用其他浏览器,例如 Chromium。另一个选项是在本地托管此接口[3].
上面提供的链接包含rpc
URL 参数,该参数指示 Apps UI 连接到作为其值提供的 URL(在本例中为您的本地节点)。手动配置 Apps UI 以连接到另一个节点:
点击左上方的网络图标
出现一个弹出式下拉菜单。选择最后一个条目,它是使用默认端口 9944 的本地节点
要连接到自定义节点和端口,您只需选择
custom endpoint
来指定端点,然后输入自己的端点即可。这样,您可以使用 Apps UI 的单个实例连接到各个节点。
现在您会看到类似这样的内容:
“注意
如果不想在连接到已远程部署的 Substrate 节点时运行托管版本的 Polkadot-JS Apps UI ,则可以配置 ssh 本地端口转以将本地请求转发到远程主机侦听的
ws-port
。这超出了本教程的范围,但在本文底部有引用参考。
Bob 的加入
现在,Alice 的节点已建立并正在运行, Bob 可以通过 Alice 的节点引导加入网络。他这部分需要的命令看起来会比较相似。
./target/release/node-template purge-chain --base-path /tmp/bob --chain local
./target/release/node-template \
--base-path /tmp/bob \
--chain local \
--bob \
--port 30334 \
--ws-port 9945 \
--rpc-port 9934 \
--telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
--validator \
--bootnodes /ip4/<Alices IP Address>/tcp/<Alices Port>/p2p/<Alices Peer ID>
这些选项中的大多数已经在上面进行了解释,但是有几点值得一提。
因为这两个节点都在同一台物理计算机上运行,因此 Bob 必须在
--base-path
,--port
,--ws-port
, 和--rpc-port
几个选项中指定不同的路径。Bob 需要添加
--bootnodes
由于 Bob 标记并指定了一个引导节点,即 Alice。那么他必须正确指定 Alice 可以为他提供的这三部分信息。
Alice 的 IP 地址,可能是 127.0.0.1
Alice 的接口,可能是 30333
Alice 的对等 ID,只需从她的日志输出中复制 (在上面的示例输出中应该是 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs
)
如果一切顺利,则在几秒钟后,节点应对等并开始产生块。您应该在启动 Alice 节点的控制台中看到类似以下内容的行:
...
2020-06-10 13:21:20 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:21:25 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:21:27 🔍 Discovered new external address for our node: /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs
2020-06-10 13:21:30 ✨ Imported #1 (0xe656…51b4)
2020-06-10 13:21:30 💤 Idle (1 peers), best: #1 (0xe656…51b4), finalized #0 (0x826a…389d), ⬇ 1.4kiB/s ⬆ 1.4kiB/s
2020-06-10 13:21:35 💤 Idle (1 peers), best: #1 (0xe656…51b4), finalized #0 (0x826a…389d), ⬇ 0.6kiB/s ⬆ 0.6kiB/s
2020-06-10 13:21:36 🙌 Starting consensus session on top of parent 0xe6569d5358d6bb16c9f42840d6b67c16d82982aae8d4b726095a943f255e51b4
2020-06-10 13:21:36 🎁 Prepared block for proposing at 2 [hash: 0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4; parent_hash: 0xe656…51b4; extrinsics (1): [0x55fa…fccf]]
2020-06-10 13:21:36 🔖 Pre-sealed block for proposal at 2. Hash now 0x4e68c8c84d4aa5010feceabbdb6280e72f274c5689a71876397a0aaba2b435e9, previously 0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4.
2020-06-10 13:21:36 ✨ Imported #2 (0x4e68…35e9)
2020-06-10 13:21:40 💤 Idle (1 peers), best: #2 (0x4e68…35e9), finalized #0 (0x826a…389d), ⬇ 0.8kiB/s ⬆ 0.8kiB/s
2020-06-10 13:21:42 ✨ Imported #3 (0x609b…116e)
2020-06-10 13:21:45 💤 Idle (1 peers), best: #3 (0x609b…116e), finalized #1 (0xe656…51b4), ⬇ 1.0kiB/s ⬆ 1.1kiB/s
...
这些行显示的是 Bob 节点已经实现和 Alice 点对点 (1 peers
), 他们已经产生了一些区块 (best: #3 (0x609b…116e)
), 已经区块正在被最终确认 (finalized #1 (0xe656…51b4)
)。
查看启动 Bob 节点的控制台,您应该会看到类似的内容。
一旦确认两个节点都按预期运行,就可以将其关闭。本教程的下一部分将包含必要时用于重新启动节点的命令。
参考
配置 ssh 本地端口转发[4]
参考链接
创建你的第一条Substrate链: https://substrate.dev/docs/en/tutorials/create-your-first-substrate-chain/
[2]Substrate Node Template: https://github.com/substrate-developer-hub/substrate-node-template
[3]在本地托管此接口: https://github.com/polkadot-js/apps#development
[4]配置 ssh 本地端口转发: https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/
Dan Forbes更新于 6/11/2020
原文:https://substrate.dev/docs/en/tutorials/start-a-private-network
翻译:PolkaWorld 社区
欢迎学习 Substrate:
https://substrate.dev/
关注 Substrate 进展:
https://github.com/paritytech/substrate
关注 Polkadot 进展:
https://github.com/paritytech/polkadot
更多内容:
扫码关注公众号,回复 “1” 加入波卡群
关注 PolkaWorld
发现 Web 3.0 时代新机遇
点个 “在看” 再走吧!